﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
// 求出0～100000之间的所有“水仙花数”并输出。
//
//“水仙花数”是指一个n位数，其各位数字的n次方之和确好等于该数本身，
//如 : 153＝1 ^ 3＋5 ^ 3＋3 ^ 3，则153是一个“水仙花数”。
#include<math.h>
//int getdigitcount(int num)
//{
//	
//	if (num == 0)
//	{
//		return 1;
//
//	}
//	int count = 0;
//	while (num > 0)
//	{
//		num = num / 10;
//		count++;
//	}
//	return count;
//
//}
//
//int main()
//{
//	for (int i = 0;i <= 10000;i++)
//	{
//		int digitcount = getdigitcount(i);
//		int sum = 0;
//		int tmp = i;
//		while (tmp > 0)
//		{
//			int digit = tmp % 10;
//			sum += pow(digit, digitcount);
//			tmp /= 10;
//		}
//		if (sum == i)
//		{
//			printf("%d\n", i);
//		}
//	}
//	return 0;
//}

//求Sn = a + aa + aaa + aaaa + aaaaa的前5项之和，其中a是一个数字，
//
//例如：2 + 22 + 222 + 2222 + 22222

//int main()
//{
//
//	int a = 2;
//	int sum = 0;
//	while (a>0 && a<=9999)
//	{
//		a = 10 * a + 2;
//		sum += a;
//	}
//	sum += 2;
//	printf("%d\n", sum);
//
//
//	return 0;
//}

//写一个递归函数DigitSum(n)，输入一个非负整数，返回组成它的数字之和
//
//例如，调用DigitSum(1729)，则应该返回1 + 7 + 2 + 9，它的和是19
//
//输入：1729，输出：19
//int DigitSum(int n)
//{
//
//	if (n < 10)
//	{
//		return n;
//	}
//	return n % 10+DigitSum(n/10);
//
//
//
//}
//int main()
//{
//	int i = 0;
//	scanf("%d", &i);
//	int result = 0;
//
//	if (i >= 0)
//	{
//	result= DigitSum(i);
//	printf("%d\n", result);
//	}
//	else
//	{
//		return -1;
//
//	}
//	return 0;
//}

//递归和非递归分别实现求n的阶乘（不考虑溢出的问题）
//非递归
//int FNR(int n)
//{
//	int res = 1;
//	for (int i = 1;i <= n;i++)
//	{
//		res *= i;
//	}
//	return res;
//}
////递归
//int FR(int n)
//{
//	if (n == 0 || n == 1)
//	{
//		return 1;
//	}
//	return n * FR(n - 1);
//
//}
//
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int rnr = FNR(n);
//	printf("非递归实现：%d!=%d\n", n, rnr);
//
//	int rn = FR(n);
//	printf("递归实现：%d!=%d\n", n, rn);
//
//	return 0;
//}



//递归方式实现打印一个整数的每一位

//void printdigit(int i)
//{
//	if (i == 0)
//	{
//		return;
//	}
//	printdigit(i / 10);
//	printf("%d ", i % 10);
//
//}
//
//int main()
//{
//	int i = 0;
//	scanf("%d", &i);
//	if (i == 0)
//	{
//		printf("0");
//	}
//	else
//		printdigit(i);
//	
//	
//
//	return 0;
//}


//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

//
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("&arr[%d] = %p\n ", i, &arr[i]);
//	}
//	return 0;
//}


//一个元素大小
//int main()
//{
//	int arr[10] = { 0 };
//	printf("%d\n", sizeof(arr[0]));//单位是字节
//	return 0;
//}
//
////数组大小
//int main()
//{
//	int arr[10] = { 0 };
//	printf("%d\n", sizeof(arr));
//	return 0;
//}
//
////元素个数
//int main()
//{
//	int arr[10] = { 0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	printf("%d\n", sz);
//	return 0;
//}
//
//int main()
//{
//	int arr[3][5] = { 0 };
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < 3; i++)
//	{
//		for (j = 0; j < 5; j++)
//		{
//			printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
//		}
//	}
//	return 0;
//}

#include<windows.h>
//int main()
//{
//	char arr1[] = "welcome to HeFei！";
//	char arr2[] = "##################";
//	int left = 0;
//	int right = strlen(arr1) - 1;
//	printf("%s\n", arr2);
//	while (left <= right)
//	{
//		Sleep(1000);
//		arr2[left] = arr1[left];
//		arr2[right] = arr1[right];
//		left++;
//		right--;
//		printf("%s\n", arr2);
//	}
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	int b = 0;
//	//输⼊
//	scanf("%d %d", &a, &b);
//	//调⽤加法函数，完成a和b的相加
//	//求和的结果放在r中
//	//to do
//	//输出
//	int r = a + b;
//	printf("%d\n", r);
//	return 0;
//}
//
//int Add(int x, int y)
//{
//	int z = 0;
//	z = x + y;
//	return z;
//}
//int main()
//{
//	int a = 0;
//	int b = 0;
//	//输⼊
//	scanf("%d %d", &a, &b);
//	//调⽤加法函数，完成a和b的相加
//	//求和的结果放在r中
//	int r = Add(a, b);
//	//输出
//	printf("%d\n", r);
//	return 0;
//}

//void set_arr(int arr[], int sz)
//{
//	int i = 0;
//		for (i = 0; i < sz; i++)
//		{
//			arr[i] = -1;
//		}
//}
//void print_arr(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//}

//int is_leap_year(int y)
//{
//	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
//		return 1;
//	else
//		return 0;
//}
//int get_days_of_month(int y, int m)
//{
//	int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//	int day = days[m];
//	if (is_leap_year(y) && m == 2)
//		day += 1;
//	
//		return day;
//}
//int main()
//{
//	int y = 0;
//	int m = 0;
//	scanf("%d %d", &y, &m);
//	int d = get_days_of_month(y, m);
//	printf("%d\n", d);
//	return 0;
//}
//
//
//int main()
//{
//	printf("%d\n", strlen("abcdef"));//链式访问
//	return 0;
//}




//int main()
//{
//	printf("%d", printf("%d", printf("%d", 43)));
//	return 0;
//}

//#include <stdio.h>
//void test()
//{
//	static int i = 0;
//	i++;
//	printf("%d ", i);
//}
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		test();
//	}
//	return 0;
//}

//递归和非递归分别实现求第n个斐波那契数
//
//例如：
//
//输入：5  输出：5
//
//输入：10， 输出：55
//
//输入：2， 输出：1
//递归

//int fib(int n)
//{
//	if (n == 1 || n == 2)
//	{
//		return 1;
//	}
//	return fib(n - 1) + fib(n - 2);
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int fib(n);
//	printf("%d\n", fib(n));
//	return 0;
//}
//非递归
//int fib(int n)
//{
//	if (n == 1 || n == 2)
//	{
//			return 1;
//	}
//	int a = 1, b = 1;
//	for (int i = 3;i <= n;i++)
//	{
//		int tmp = b;
//		b = a + b;
//		a = tmp;
//	}
//
//	return b;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int fib(n);
//	printf("%d\n", fib(n));
//	return 0;
//}

//编写一个函数实现n的k次方，使用递归实现。
int pow(int x, int y)
{
	if (y == 0)
	{
		return 1;
	}
	else if (y == 1)
	{
		return x;
	}
	else
		return x * pow(x, y - 1);


}
int main()
{
	int a, b = 0;
	scanf("%d %d", &a, &b);
	printf("%d\n", pow(a, b));

	return 0;
}


